import request from "@/utils/request";

export default {
    namespaced: true,
    // 定义你所需要的管理的对象或者属性，可以把这个当作是SPA或者组件的data属性
    state() {
        return {
            user: {}
        }
    },

    // 定义mutations修改状态state的行为和状态
    mutations: {
        toLoginuser(state, res) {
            state.user = {...res}
        },
        clearuser(state) {
            state.user = {}
        }
    },

    actions: {
        async logined(context, logininfo) {
            try {
                // 1、异步执行, res就是服务器返回的信息
                const res = await request.post("/auth/login/pwd", logininfo);
                // 2、如果请求成功就是200
                if (res.data.status == 200) {
                    // 2、获取服务器端信息
                    let {token, userId, nickname, username, avatar} = res.data.data;
                    // 3、将服务器端信息放入到localStorage中
                    localStorage.setItem("token", token);
                    localStorage.setItem("userId", userId);
                    localStorage.setItem("nickname", nickname)
                    localStorage.setItem("username", username)
                    localStorage.setItem("avatar", avatar);
                    // 状态管理用户对象
                    context.commit("toLoginuser", res.data.data);
                    // 为什么返回承诺？
                    // 把操作继续延续到外面去处理
                    return Promise.resolve(res);
                } else {
                    return Promise.reject(res);
                }
            } catch (err) {
                alert("服务器正在打酱油中!!!!");
            }
        },

        async logout(context) {
            try {
                const res = await request.post("/auth/logout");
                if (res.status == 200) {
                    localStorage.removeItem("token");
                    localStorage.removeItem("gotoAddreess");
                    localStorage.removeItem("userId");
                    localStorage.removeItem("username");
                    localStorage.removeItem("nickname");
                    localStorage.removeItem("avatar");
                    // 清空状态管理的用户信息
                    context.commit("clearuser");
                    // 为什么返回承诺？
                    // 把操作继续延续到外面去处理
                    return Promise.resolve();
                } else {
                    return Promise.reject();
                }
            } catch (err) {
                alert("服务器正在打酱油中!!!!");
            }
        }
    },

    // 在getters定义公共的计算属性
    getters: {}
}